/**
 * javascript AMD --
 * @description 主要管理模块
 * 		-------------权限管理
 * @author cnbi<zhh>
 * @time 2014/5/5
 * @version 1.0
 */
 define(['apps/utils/tools','apps/manage'],function(tools,manage){
	  function init (param) {
		 //绑定事件
		  btnBind(param["obj"]);
	  };
	  function success(msg){
		  $("#content").empty().append(msg);
		  init(Utils.paramObj);
	  };
	  
	  function btnBind(bean){
	  	  //角色树&菜单树加载
	  	  treeBind();
	  	  //树菜单选中事件
	  	  checkedBind(bean);
	  	  //角色分配菜单操作
	  	  grandRole(bean);
	  	  //验证角色名
		  inputRoChange('#roleForm');
	  	  //添加角色操作
	  	  addRole(bean);
	  	  //弹出修改角色窗口
	  	  roleWin();
	  	  //修改角色操作
	  	  updateRole(bean);
	  	  //删除角色操作
	  	  removeRole(bean);
	  };
	  
	  //添加角色
	  function addRole(bean){
	  	  $('#saveRole').click(function(){
		  	 var url  = tools.getBasePathUrl() + bean.scode+"/addRole.cnbi";
		  	 operatorRole('#roleForm',url,bean,'#saveRole');
	  	 });
	  };
	  
	  //修改角色
	  function roleWin(){
	  	var $upRole = $('#upRole');
	  	$upRole.click(function(){
			//选择的角色
	  		var role = getRoleParam();
			if(isEmpty(role)){
	  			attrMove($upRole);
	  	  	 	$('#contentRole').html('<code>请选择要修改的角色</code>');
	  		}else{
	  			editAttr($upRole)
	  			 $('#upModal h4').children().next().text('修改['+role.sroleName+']信息');
	  			 $('#upForm input[name=roleID]')[0].value = role.roleID;
	  			 $('#upForm input[name=sroleName]')[0].value = role.sroleName;
	  	  	     $('#upForm input[name=sroleDesc]')[0].value = role.sroleDesc;
	  		}
	  		 //验证角色名
		  	inputRoChange('#upForm');
		});
	  };
	  function updateRole(bean){
	  	 $('#updateRole').click(function(){
			var url = tools.getBasePathUrl() + bean.scode+"/updateRole.cnbi";
  			operatorRole('#upForm',url,bean,'#updateRole');
		});
	  };
	  // 添加 和 修改 角色操作
	   /**
	   * @param formId  form表单 dom元素
	   * @param url 请求地址
	   * @param bean 当前页面对象
	   * @param buttonId 操作按钮 dom 元素id
	   * **/
	  function operatorRole(formId,url,bean,buttonId){
	  	 //表单验证
		  $(formId).validation();
		    // 2.最后要调用 valid()方法
		  if ($(formId).valid()==false){
		    //$("#error-text").text("用户信息填写有误!");
		  	  $(buttonId).removeAttr('data-dismiss');
		      return false;
		  }else{
		  	   //去空格
		  	  trimSpace();
		  	  //当前执行的是 修改操作
		  	  /**Jquery 扩展 表单序列化 **/
			  var obj = $(formId).serializeJson();
			  tools.applyIf(obj,bean);
			  tools.ajax({url : url,dataType : 'html',data :obj,success :success});
			  //attrMove($(buttonId)); bootstrap 不支持 模态框重叠
			  var text = '';
	 	  	  if(buttonId === '#saveRole'){
	 	  	 		text = '添加';
	 	  		}else text = '修改';
	 	  		//$('#contentRole').html('<span style="color:green">'+text+'角色<code>'+obj.sroleName+'</code>操作完成</span>');
	 	  		$(buttonId).attr({'data-dismiss':'modal'});
	 	  		$.Zebra_Dialog(text+'角色<code>'+obj.sroleName+'</code>操作完成',
				  		{'auto_close':2000,'type':false,'buttons':false});
	 	  		//$('#contentRole').empty();
		  }
	  };
	  
	  //删除角色
	  function removeRole(bean){
		  	var $delRole = $('#delRole');
		  	 $delRole.click(function(){
		  	 	//选择的角色
			  	 var role = getRoleParam();	 
			  	  if(isEmpty(role)){
			  	  	 attrMove($delRole);
			  	  	 $('#contentRole').html('<code>请选择要删除的角色</code>');
			  	  }else{
			  	  	 attrMove($delRole);
			  	  	 $('#contentRole').html('<code>确认要删除角色['+role.sroleName+']吗?</code>');
			  	  	 $('#myModal .modal-footer').show();
			  	  	 $('#okbtn').click(function(){
			  	  	 	//$('#okbtn').unbind('click');
			  	  	 	var url  = tools.getBasePathUrl() + bean.scode+"/delRole.cnbi";
		  				bean.roleID = role.roleID;
		  				bean.sroleName = role.sroleName;
		  			    tools.ajax({url : url,dataType : 'html',data :bean,
					  		success :success});
			  	  	 });
			  	  }
		  	 });
	  };
	  
	  //角色名是否重名
	  function inputRoChange(dom){
	  	var $domid = $(dom+' input[name=sroleName]');
	  	$domid.change(function(){
	  		trimSpace();
	  		var sroleName = $(dom+' input[name=sroleName]')[0].value;
  		    //所有角色
	  	    var $dom = $('#roletree').nextAll().find('> li > span[name=checked]');
	  	    $dom.each(function(){
  	  			var bean = $(this)[0]["attributes"].srolename.value;
  	  			if(bean == sroleName){
  	  				$domid[0].value = '';
  	  				if(!$("#valierr")[0])
							$domid.parent().after('<span class="help-block" id="valierr" style="color: #a94442">角色名重复了</span>');
					 else{
					 	$domid.parent().next().remove();
					 	$domid.parent().after('<span class="help-block" id="valierr" style="color: #a94442">角色名重复了</span>');
					 }
					 return false ;
				}else{
					$domid.parent().next().remove();
				}
	  	    });
	  	});
	  };
	  
	  //角色分配菜单操作
	  function grandRole(bean){
	  	 var $grand = $('#grandRole');
	  	 $grand.click(function(){
	  	 	//选择的角色
	  	 	 var role = getRoleParam();
	  	 	 //选择 分配的 菜单项
	  	  	 var menu = getMenuParam();
	  	  	 if(isEmpty(role)){
	  	  	 	attrMove($grand);
	  	  	 	$('#contentRole').html('<code>您还未选择角色</code>');
	  	 	 }else if(menu.length == 0){
	  	 	 	attrMove($grand);
	  	  	 	$('#contentRole').html('<code>您还未给角色分配菜单</code>');
	  	 	 }else{
	  	 	 	 removeAttr($grand);
	  	 		 var scodeStr = '';
	  	 		 for (var i = 0; i < menu.length; i++) {
	  	  	 		 scodeStr += menu[i].scode;
	  	  	 		 if(i != menu.length -1 ){
	  	  	 		 	scodeStr += ",";
	  	  	 		 }
	  	  	 	 }
	  	  	 	 bean.roleID = role.roleID;
	  	  	 	 bean.menux = scodeStr;
	  	  	 	 var url = tools.getBasePathUrl() + bean.scode+"/grant.cnbi";
	  	  	 	  tools.ajax({url : url,dataType : 'html',data :bean,success :success});
	  	  	 	  $.Zebra_Dialog('<span style="color:green">角色分配菜单操作完成</span>',{'auto_close':2000,'type':false,'buttons':false});
	  	  	 	  //attrMove($grand);
	  	  	 	  //$('#contentRole').html('<span style="color:green">角色分配菜单操作完成</span>');
	  	 	 }
	  	 });
	  	 
	  };
	  //显示  模态框
	  function attrMove($grand){
	  	//data-toggle="modal" data-target="#myModal"
	  	 $grand.attr({'data-toggle':'modal'});
	  	 $grand.attr({'data-target':'#myModal'});
	  };
	  //隐藏 模态框
	  function removeAttr($grand){
	  	$grand.removeAttr('data-toggle');
	  	$grand.removeAttr('data-target');
	  };
	  //更换 模态框
	  function editAttr($grand){
	  	 $grand.attr({'data-toggle':'modal'});
	  	 $grand.attr({'data-target':'#upModal'});
	  };
	  	//选择的角色
	  function getRoleParam(){
	  	  var role = {}; 
	  	  var $dom = $('#roletree').nextAll().find('> li > span[name=checked]');
	  	  $dom.each(function(){
	  	  	if($(this).hasClass('check-role-1')){
	  	  		var bean = $(this)[0]["attributes"];
	  	  		role.roleID = bean.roleid.value;
	  	  		role.sroleName = bean.srolename.value;
	  	  		role.sroleDesc = bean.sroledesc.value;
	  	  	}
	  	  });
	  	  return role;
	  };
	  //选择 分配的 菜单项
	  function getMenuParam(){
	  	  var menuArr = [];
	  	  var $dom = $('#menuchild span[name=checked]');
	  	  $dom.each(function(){
	  	  	if($(this).hasClass('check-role-1')){
	  	  		var menu = {}, bean = $(this)[0]["attributes"];
	  	  		//menu.sname = bean.sname.value;
	  	  		menu.scode = bean.scode.value;
	  	  		menuArr.push(menu);
	  	  	}
	  	  });
	  	  return menuArr;
	  };
	  
	   //树菜单选中事件
	  function checkedBind(bean){
	  	 //角色role && 菜单 menu
	  	 var $Dom = $('span[name=checked]');
	  	 $Dom.bind('click',function(){
	  	 	changeClass($(this));
	  	 });
	  	 //给角色分配的时候只能 单选 选择
  	 	$('#rolechild span[name=checked]').bind('click',function(){
  	 		var value = $(this)[0]["attributes"].roleid.value;
  	 		var $dom = $('#roletree').nextAll().find('> li > span[name=checked]');
  	 		$dom.each(function(){
  	 			var valuex = $(this)[0]["attributes"].roleid.value;
  	 			if(value == valuex){
  	 				//角色选择时 ;需要查询 当前角色所拥有的菜单项
  	 				if($(this).hasClass('check-role-1'))
  	 					selectRoleAndMenus(bean,value);
  	 			}else{
  	 				$(this).removeClass('check-role-1').addClass('check-role-0');
  	 				unchecked();
  	 			}
  	 		});
  	 		
  	 	});
  	 	
  	 	//menu 取消选择
  	 	function unchecked(){
  	 		$('#menuchild span[name=checked]').each(function(){
  	 			$(this).removeClass('check-role-1').addClass('check-role-0');
  	 		});
  	 	};
  	 	/**
  	 	 * 角色选择时 ;需要查询 当前角色所拥有的菜单项
  	 	 * @param bean 当前页面对象
  	 	 * @param value 当前选角色节点的 roleID
  	 	 * **/
  	 	function selectRoleAndMenus(bean,value){
  	 		bean.roleID = value;
  	 		var url = tools.getBasePathUrl() + bean.scode+"/selectRoleAndMenus.cnbi";
  	 		tools.ajax({url : url,dataType : 'json',data :bean,success :function(data){
  	 			if(data.length != 0){
  	 				checkedMenus(data);
  	 			}else{
  	 				unchecked();
  	 			}
  	 		}});
  	 	};
  	 	//节点选中
  	 	function checkedMenus(data){
  	 		$('#menuchild .parent_li > ul li').show();
  	 		$('#menuchild span[name=checked]').each(function(){
  	 			$(this).removeClass('check-role-1').addClass('check-role-0');
  	 			var scode = $(this)[0].attributes.scode.value;
  	 			for (var i = 0; i < data.length; i++) {
  	 				if(scode === data[i].scode){
  	 					$(this).removeClass('check-role-0').addClass('check-role-1');
  	 				}
  	 			}
  	 		});
  	 	};
  	 	
	  	 $('#menutree').click(function(){
	  	 	$('#menuchild span[name=checked]').each(function(){
	  	 		changeClass($(this));
	  	 	});
	  	 });
	  	 
	  	//父节点选中 子节点 也选中
	  	 $('#menuchild li.parent_li > span').on('click',function(){
	  	 	var $dom = $(this).nextAll().find(' > li > span[name=checked]');
	  	 	if($(this).hasClass('check-role-0')){
 				$dom.each(function(){
 					$(this).removeClass('check-role-1').addClass('check-role-0');
 				});
	  	 	}else{
	  	 		$dom.each(function(){
 					$(this).removeClass('check-role-0').addClass('check-role-1');
 				});
	  	 	}
  	 		
	  	 });
	  	 
	  	 //子节点选中 父节点也得选中
	  	 $('.leaf').bind('click',function(){
	  	 	 if($(this).hasClass('check-role-1')){
	  	 	 	$(this).parent().parent().prevAll('span').removeClass('check-role-0').addClass('check-role-1');
	  	 	 }
	  	 });
	  	
	  };
	  
	  //更改 class
	  function changeClass($dom){
	  	  if($dom.hasClass('check-role-0')){
	  	 	 $dom.removeClass('check-role-0').addClass('check-role-1');
	  	  }else{
	  	 	 $dom.removeClass('check-role-1').addClass('check-role-0');
	  	  }
	  };
	  //角色树&菜单树加载
	  function treeBind(){
	  	 $('.tree li:has(ul)').addClass('parent_li').find(' > span').attr('title', '展开');
	  	 $('#menuchild .parent_li > ul li').hide();
	     $('.tree li.parent_li > span').on('dblclick', function (e) {
	        var children = $(this).parent('li.parent_li').find(' > ul > li');
	        if (children.is(":visible")) {
	            children.hide('fast');
	           $(this).attr('title','展开');
	        } else {
	            children.show('fast');
	          $(this).attr('title','合并');
	        }
	        e.stopPropagation();
    	 });
	  };
	  
	 /**
	 * 检测对象是否是空对象(不包含任何可读属性)。
	 */
	function isEmpty(obj){
	    for (var name in obj){
	        return false;
	    }
	    return true;
	};
	 /** 输入列表 input  去  空格***/
		function trimSpace(){
			var text = $('input[type="text"],input[type="password"]');
			//input 去空格
			$.each(text,function(i,val){
				var id = '#'+text[i].id;
				var o = $(id)[0];
				if(o != undefined){
					o.value = o.value.trim();
				}
			});
		} ;
	  return {
	    init: init
	  };
});  